package top.ezzz.model;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.util.ArrayList;
import java.util.List;

@Data
public class SystemInfo {

    private Cpu cpu = new Cpu();
    private Memory memory = new Memory();
    private Os os = new Os();
    private List<Network> networks = new ArrayList<>();
    private List<Disk> disks = new ArrayList<>();


    @Setter
    @Getter
    @Accessors(chain = true)
    public static class Cpu {
        private String model;      // 处理器型号
        private double usedPercent; // 使用率(百分比)
        private int coreCount;     // 核心数
    }

    @Setter
    @Getter
    @Accessors(chain = true)
    public static class Memory {
        private String total;       // 总内存（如 "8 GB"）
        private String available;   // 可用内存
        private String used;        // 已用内存
        private double usePercent;  // 使用百分比
    }

    @Setter
    @Getter
    @Accessors(chain = true)
    public static class Os {
        private String family;      // 系统家族(如Windows/Linux)
        private String version;     // 系统版本
        private String kernelVersion; // 内核版本
    }

    @Setter
    @Getter
    @Accessors(chain = true)
    public static class Network {
        private String name;        // 网卡名称
        private String ip;          // IP地址
        private String mac;         // MAC地址
        private String status;      // 状态(up/down)
        private String speed;       // 网卡速率（如 "1000 Mbps"）
        private String upSpeed;     // 上行速率
        private String downSpeed;   // 下行速率
        private boolean virtual;  // 是否为虚拟网卡
        private String type;        // 网卡类型（物理/虚拟）
    }

    // ...existing code...
    @Setter
    @Getter
    @Accessors(chain = true)
    public static class Disk {
        private String name;        // 磁盘名称
        private String type;        // 磁盘类型
        private String total;       // 总容量
        private String available;   // 可用容量
        private String used;        // 已用容量
        private double usePercent;  // 使用百分比
        private String mountPoint;  // 挂载点(原mount命名不清晰)
    }
}